package com.atde._01_principle.segregation;

/**
 *  结论：
 *  在类中 演示接口隔离原则：
 *      1. 接口的实现应该是最小的，即应该将多个具有不同功能的方法分别进行定义，而不应该把所有的功能都定义在相同的接口中。
 *      2. 此类中的接口 定义了5个方法，其实现的功能都有所不同，并且 B类 和 D类实现类接口 强制实现了接口，而 A类 和 C类 只是需要接口的部分方法 使其都依赖接口，
 *      3. 在本类的做法虽然可以返回部分功能的代码 但是其暴露了不同的功能，导致类A和类C的代码都依赖接口，而类A和类C并不需要接口中的所有功能，
 *      4. 这就违反了接口隔离原则，即接口隔离原则是针对接口的，不是针对具体的类。
 *
 *      解决方法：将接口不同的功能的方法进行拆分，使其只依赖自己需要的功能，而不需要依赖不需要的功能。
 */

public class Segregation01 {
}

interface Interface1 {
    void operation1();

    void operation2();

    void operation3();

    void operation4();

    void operation5();
}

class B implements Interface1{
    public void operation1() {
        System.out.println("B 实现了 operation1");
    }

    public void operation2() {
        System.out.println("B 实现了 operation2");
    }

    public void operation3() {
        System.out.println("B 实现了 operation3");
    }

    public void operation4() {
        System.out.println("B 实现了 operation4");
    }

    public void operation5() {
        System.out.println("B 实现了 operation5");
    }
}

class D implements Interface1{
    public void operation1() {
        System.out.println("D 实现了 operation1");
    }

    public void operation2() {
        System.out.println("D 实现了 operation2");
    }

    public void operation3() {
        System.out.println("D 实现了 operation3");
    }

    public void operation4() {
        System.out.println("D 实现了 operation4");
    }

    public void operation5 () {
        System.out.println("D 实现了 operation5");
    }
}


class A {
    public void depend1(Interface1 i) {
        i.operation1();
    }

    public void depend2(Interface1 i) {
        i.operation2();
    }

    public void depend3(Interface1 i) {
        i.operation3();
    }
}

class C {
    public void depend1(Interface1 i) {
        i.operation1();
    }

    public void depend4(Interface1 i) {
        i.operation4();
    }

    public void depend5(Interface1 i) {
        i.operation5();
    }
}